package com.home.common.utils.date;

import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * Description: java8 时间工具操作类
 * Created by 王大宸 on 2020-10-13 10:09
 * Created with IntelliJ IDEA.
 */
public class LocalDateTimeUtil {

    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

    /***
     * 功能说明：将LocalDateTime转为自定义的时间格式的字符串
     *
     * @author 王大宸
     * @date 2020/10/13 16:10
     * @param localDateTime  localDateTime
     * @param format         时间格式
     * @return java.lang.String
     */
    public static String dateToString(LocalDateTime localDateTime, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(formatter);
    }

    /***
     * 功能说明： 将long类型的timestamp转为LocalDateTime
     *
     * @author 王大宸
     * @date 2020/10/13 16:11
     * @param timestamp  long 类型时间
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime longTimeToDate(long timestamp) {
        Instant instant = Instant.ofEpochMilli(timestamp);
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    /***
     * Description：将LocalDateTime转为long类型的timestamp
     *
     * @author 王大宸
     * @date 2020/10/13 15:02
     * @param localDateTime
     * @return long
     */
    public static long dateToLongTime(LocalDateTime localDateTime) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return instant.toEpochMilli();
    }

    /***
     * Description： 将某时间字符串转为自定义时间格式的LocalDateTime
     *
     * @author 王大宸
     * @date 2020/10/13 15:04
     * @param time     时间
     * @param format   格式
     * @return java.time.LocalDateTime
     */
    public static LocalDateTime stringToDate(String time, String format) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(time, df);
    }

    /***
     * 功能说明：计算两个时间差
     *
     * @author 王大宸
     * @date 2020/10/13 16:11
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return java.time.Duration
     */
    public static Duration getDatePoor(LocalDateTime startTime, LocalDateTime endTime) {
        return Duration.between(startTime, endTime);
    }

    public static String getLocalDateTime(String format) {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(format));
    }

}
